/**
 * @file         bsc_uart_framework.h
 * @brief        串口框架_框架对象
 * @note    
 * @author       Jpz(jinpuzhao@hopechart.com, 靳普诏)
 * @data         2022-7-14
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2022-7-14   <td>1.0                   <td>Jpz             <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */


#ifndef _BSC_UART_FRAMEWORK_H_
#define _BSC_UART_FRAMEWORK_H_

#include "ofc/ofc_types.h"
#include "bsc_uart_dispatch/bsc_uart_dispatch.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 初始化工作框架
 * @return >= 0 初始化成功
           <  0 初始化失败
 */
Int32 TBsUartFrameworkInit(void);

/**
 * 析构工作框架
 * @return 
 */
void TBsUartFrameworkDone(void);

/**
 * 执行一次工作框架，触发串口数据分发动作
 * @return 
 */
void TBsUartFrameworkRunOnce(void);

/**
 * 判断分发对象是否注册
 * @param item：分发对象指针
 * @return True      已注册
 *         False     未注册
 */
Bool TBsUartFrameworkIsRegister(TBsUartDispatch *item);

/**
 * 注册分发对象
 * @param item：分发对象指针
 * @return > 0      已注册的数量
 *         <  0     注册达到上限，返回码参见(@ref THccAppUartDispErrorCode)[@file bsc_uart_error_code.h]
 */
Int32 TBsUartFrameworkRegisterDisp(TBsUartDispatch *item);

/**
 * 注销分发对象
 * @param item：分发对象指针
 * @return >= 0     现在注册的数量
 *         < 0      无效参数，返回码参见(@ref THccAppUartDispErrorCode)[@file bsc_uart_error_code.h]
 */
Int32 TBsUartFrameworkUnregisterDisp(TBsUartDispatch *item);
 
/**
 * 当前已注册的分发对象数量
 * @return >= 0     分发对象数量
 */
Int32 TBsUartFrameworkDispatchCount(void);

/**
 * 设备对象数量
 * @return >= 0     设备对象数量
 */
Int32 TBsUartFrameworkChannelCount(void);

/**
 * 判断串口通道是否打开
 * @param channel： 串口通道号
 * @return True     已打开
 *         False    未打开
 */
Bool TBsUartFrameworkChannelIsOpen(UInt8 channel);

/**
 * 打开串口通道
 * @param channel   串口通道号
 * @param baudrate  波特率（示例值: 115200）
 * @param parity    校验位 参考值(@ref TBsUartParity)[@file bsc_uart_device.h]
 * @return >= 0      成功
 *          < 0       失败，返回码参见(@ref THccAppUartDispErrorCode)[@file bsc_uart_error_code.h]
 */
Int32 TBsUartFrameworkChannelOpen(UInt8 channel, Int32 baudrate, Int32 parity);

/**
 * 关闭串口通道
 * @param channel： 串口通道号
 * @return
 */
void TBsUartFrameworkChannelClose(UInt8 channel);

/**
 * 检查串口通道是否可写
 * @param channel： 串口通道号
 * @return True     可写
 *         False    不可写
 */
Bool TBsUartFrameworkWriteAble(Byte channel);

/**
 * 通过串口通道发送数据
 * @param channel： 串口通道
 * @param data：    数据地址
 * @param data_len：数据长度 
 * @return > 0      成功发送的数据长度
 *         <= 0     发送失败
 */
Int32 TBsUartFrameworkWriteData(Byte channel, const Byte *data, Int32 data_len);

/**
 * 设置校验位自适应使能
 * @param channel： 串口通道
 * @param enable：  True: 使能; False: 除能
 * @return > 0      成功
 *         <= 0     失败
 * @note 暂不支持
 */
Int32 TBsUartFrameworkSetParityAutoAdaptEnable(Byte channel, Bool enable);

/**
 * 获取校验位自适应使能
 * @param channel： 串口通道
 * @return True: 使能; False: 除能
 * @note 暂不支持
 */
Bool TBsUartFrameworkParityAutoAdaptEnable(Byte channel);


/**
 * 获取设备波特率  
 * @param channel   设备通道号
 * @return >  0     成功获取当前波特率
 *         == 0     获取失败
 */
UInt32 TBsUartFrameworkDeviceBaudrate(Byte channel);




#ifdef __cplusplus
} // extern "C" {
#endif


#endif // #ifndef _BSC_UART_FRAMEWORK_H_

